{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Predicting drug-target interaction"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this tuorial, we will go through how to run a GraphDTA model for compound-protein affinity prediction. In particular, we will demonstrate to train, evaluate and inference the GraphDTA model using scripts in folder `apps/drug_target_interaction/graph_dta/`."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# GraphDTA"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**GraphDTA** represents compound drugs as graphs and uses graph neural networks to predict drug-target affinity. Specifically, the graph is converted from SMILES using RDKit, and passed through variants of graph neural network to extract its representation. For protein, the amino acid sequence is first embeded to an array of vectors, then sequence convolution is applied to get the protein representation. Finally, the combined representations of the compound drug and the protein is feeded into a feedforward network to regress the affinity measurement, such as Kd, Ki, KIBA, etc."
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The code for GraphDTA is in `../apps/drug_target_interaction/graph_dta/`, we will redirect to this folder for later steps."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "['davis',\n",
       " 'data_gen.py',\n",
       " 'data_preprocess.py',\n",
       " '__pycache__',\n",
       " 'model.py',\n",
       " 'README.md',\n",
       " 'README_cn.md',\n",
       " 'utils.py',\n",
       " 'train.py',\n",
       " 'demos']"
      ]
     },
     "metadata": {},
     "execution_count": 1
    }
   ],
   "source": [
    "import os\n",
    "import sys\n",
    "sys.path.insert(0, os.path.abspath(os.path.join(os.getcwd(), \"..\")))\n",
    "os.chdir('../apps/drug_target_interaction/graph_dta/')\n",
    "os.listdir(os.getcwd())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prepare dataset"
   ]
  },
  {
   "source": [
    "Download the Davis dataset using `wget`. If you do not have `wget` on your machine, you could also\n",
    "copy the url below into your web browser to download the data. But remember to copy the data manually to the\n",
    "path \"../apps/drug_target_interaction/graph_dta/\"."
   ],
   "cell_type": "markdown",
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "--2020-12-17 19:27:53--  https://baidu-nlp.bj.bcebos.com/PaddleHelix%2Fdatasets%2Fdti_datasets%2Fdavis.tgz\n",
      "正在解析主机 baidu-nlp.bj.bcebos.com (baidu-nlp.bj.bcebos.com)... 10.70.0.165\n",
      "正在连接 baidu-nlp.bj.bcebos.com (baidu-nlp.bj.bcebos.com)|10.70.0.165|:443... 已连接。\n",
      "已发出 HTTP 请求，正在等待回应... 200 OK\n",
      "长度：23301615 (22M) [application/gzip]\n",
      "正在保存至: “PaddleHelix%2Fdatasets%2Fdti_datasets%2Fdavis.tgz”\n",
      "\n",
      "PaddleHelix%2Fdatas 100%[===================>]  22.22M  6.47MB/s  用时 4.7s    \n",
      "\n",
      "2020-12-17 19:27:58 (4.72 MB/s) - 已保存 “PaddleHelix%2Fdatasets%2Fdti_datasets%2Fdavis.tgz” [23301615/23301615])\n",
      "\n",
      "\u001B[1m\u001B[36mtest\u001B[m\u001B[m  \u001B[1m\u001B[36mtrain\u001B[m\u001B[m\n"
     ]
    }
   ],
   "source": [
    "# download and decompress the data\n",
    "!wget \"https://baidu-nlp.bj.bcebos.com/PaddleHelix%2Fdatasets%2Fdti_datasets%2Fdavis.tgz\" --no-check-certificate\n",
    "!tar -zxf \"PaddleHelix%2Fdatasets%2Fdti_datasets%2Fdavis.tgz\"\n",
    "!ls \"./davis/processed\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Suppose you have download the processed Davis dataset , please refer to the script `data_gen.py` for the implementation of `DTADataset` class, which is a stream dataset wrapper for [PGL](https://github.com/PaddlePaddle/PGL)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stderr",
     "text": [
      "[INFO] 2020-12-17 19:28:04,139 [mp_reader.py:   23]:\tujson not install, fail back to use json instead\n"
     ]
    }
   ],
   "source": [
    "from data_gen import DTADataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For the proteins sequences, there are two way to process them and get the inputs:\n",
    "* cut or add padding to get protein sequences with a fixed length, i.e. setting a `max_protein_len` > 0.\n",
    "* use the full protein sequence, i.e. setting a `max_protein_len` < 0."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data = './davis/processed/train'\n",
    "test_data = './davis/processed/test'\n",
    "max_protein_len = 1000  # set -1 to use full sequence"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_dataset = DTADataset(train_data, max_protein_len=max_protein_len)\n",
    "test_dataset = DTADataset(test_data, max_protein_len=max_protein_len)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "25046 5010\n"
     ]
    }
   ],
   "source": [
    "print(len(train_dataset), len(test_dataset))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create the model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this tutorial, we take the GIN network as an example."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "import paddle\n",
    "import paddle.fluid as fluid\n",
    "from model import DTAModel\n",
    "\n",
    "paddle.enable_static()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`model_config` shows the hyperparameters for the whole network architecture. In particular, the `model_config['compound']` is the configuration for the GNN model of compounds, and `model_config['protein']` is the configuration for the sequence convolution-based protein presentation module."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr = 0.0005                 # learning rate\n",
    "model_config = {\n",
    "    \"compound\": {\n",
    "        \"gnn_type\": \"gin\",  # type of the GNN\n",
    "        \"dropout_rate\": 0.2,# dropout rate for the GNN\n",
    "\n",
    "        \"embed_dim\": 32,    # embedding size of atom type\n",
    "        \"layer_num\": 5,     # number of GNN layers\n",
    "        \"hidden_size\": 32,  # hidden size of GNN layers\n",
    "        \"output_dim\": 128   # the dimension of representation of compound graph\n",
    "    },\n",
    "\n",
    "    \"protein\": {\n",
    "        \"max_protein_len\": max_protein_len,  # set -1 to use full sequence\n",
    "        \"embed_dim\": 128,   # embedding size of amino acid\n",
    "        \"num_filters\": 32,  # num of filters of the sequence convolution\n",
    "        \"output_dim\": 128   # the the dimension of representation of target protein\n",
    "    },\n",
    "\n",
    "    \"dropout_rate\": 0.2     # dropout rate for the affinity predictor\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create main program, start program, test program with static model `DTAModel` and Adam optimizer. For the details of `DTAModel`, please check the `model.py`. Basically, it implements the network architecutre showing in the above figure."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_program, train_startup = fluid.Program(), fluid.Program()\n",
    "with fluid.program_guard(train_program, train_startup):\n",
    "    with fluid.unique_name.guard():\n",
    "        model = DTAModel(model_config=model_config)\n",
    "        model.train()\n",
    "        test_program = train_program.clone(for_test=True)\n",
    "        optimizer = fluid.optimizer.Adam(learning_rate=lr)\n",
    "        optimizer.minimize(model.loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train and evaluate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "import shutil\n",
    "import numpy as np\n",
    "from pgl.utils.data.dataloader import Dataloader\n",
    "\n",
    "from data_gen import DTACollateFunc\n",
    "from utils import concordance_index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_epoch = 2                     # we use a small epoch number as demonstration\n",
    "batch_size = 512                  # batch size for training\n",
    "num_workers = 4                   # number of workers for the PGL dataloader\n",
    "best_model = 'gin_best_model'     # directory to save the best model, i.e. with the minimum MSE\n",
    "eval_txt = 'eval.txt'             # the text file to record the evaluation metric"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create a Paddle Executor. Note that if you want to run on GPU, use `place = fluid.cuda_places()[0]` instead."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# place = fluid.cuda_places()[0]\n",
    "place = fluid.CPUPlace()\n",
    "exe = fluid.Executor(place)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the `train()` function, we create a `DTACollateFunc` which wraps a batch of processed into a batch of graph data `pgl.graph.MultiGraph` in PGL, then with the protein input data, it can help to organize the full feed dictionary. You can check the data preparation in the inference section to understand how it works."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train(exe, train_program, model, train_dataset):\n",
    "    collate_fn = DTACollateFunc(\n",
    "        model.compound_graph_wrapper, \n",
    "        is_inference=False,\n",
    "        label_name='Log10_Kd')\n",
    "    data_loader = Dataloader(\n",
    "        train_dataset,\n",
    "        batch_size=batch_size,\n",
    "        num_workers=num_workers,\n",
    "        stream_shuffle_size=1000,\n",
    "        collate_fn=collate_fn)\n",
    "    \n",
    "    list_loss = []\n",
    "    for feed_dict in data_loader:\n",
    "        train_loss, = exe.run(\n",
    "            train_program, feed=feed_dict, fetch_list=[model.loss], return_numpy=False)\n",
    "        list_loss.append(np.array(train_loss).mean())\n",
    "    return np.mean(list_loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the `evaluate()` function, we utilize MSE and Concordance Index (CI) to evaluate the model. However, computing the ranking-based metric CI is time-consuming, we introduce the prior smallest MSE (`best_mse`) to compare with current MSE, so we can avoid some unnecessary computation of CI."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def evaluate(exe, test_program, model, test_dataset, best_mse):\n",
    "    collate_fn = DTACollateFunc(\n",
    "        model.compound_graph_wrapper, \n",
    "        is_inference=False,\n",
    "        label_name='Log10_Kd')\n",
    "    data_loader = Dataloader(\n",
    "        test_dataset,\n",
    "        batch_size=batch_size,\n",
    "        num_workers=1,\n",
    "        collate_fn=collate_fn)\n",
    "    \n",
    "    total_n, processed = len(test_dataset), 0\n",
    "    total_pred, total_label = [], []\n",
    "    for idx, feed_dict in enumerate(data_loader):\n",
    "        print('Evaluated {}/{}'.format(processed, total_n))\n",
    "        pred, = exe.run(\n",
    "            test_program, feed=feed_dict, fetch_list=[model.pred], return_numpy=False)\n",
    "        total_pred.append(np.array(pred))\n",
    "        total_label.append(feed_dict['label'])\n",
    "        processed += total_pred[-1].shape[0]\n",
    "        \n",
    "    print('Evaluated {}/{}'.format(processed, total_n))\n",
    "    total_pred = np.concatenate(total_pred, 0).flatten()\n",
    "    total_label = np.concatenate(total_label, 0).flatten()\n",
    "    mse = ((total_label - total_pred) ** 2).mean(axis=0)\n",
    "    \n",
    "    ci = None\n",
    "    if mse < best_mse:\n",
    "        ci = concordance_index(total_label, total_pred)\n",
    "        \n",
    "    return mse, ci"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The training and evaluating pipline: for each epoch, evaluate the model, if it achieves a smaller MSE on the test dataset, save the best model and update the evaluation metrics."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "========== Epoch 1 ==========\n",
      "#Epoch: 1, Train loss: 2.0141453742980957\n",
      "Evaluated 0/5010\n",
      "Evaluated 512/5010\n",
      "Evaluated 1024/5010\n",
      "Evaluated 1536/5010\n",
      "Evaluated 2048/5010\n",
      "Evaluated 2560/5010\n",
      "Evaluated 3072/5010\n",
      "Evaluated 3584/5010\n",
      "Evaluated 4096/5010\n",
      "Evaluated 4608/5010\n",
      "Evaluated 5010/5010\n",
      "Epoch: 1, Best MSE: 1.3527016639709473, Best CI: 0.7702515670196785\n",
      "========== Epoch 2 ==========\n",
      "#Epoch: 2, Train loss: 0.7326631546020508\n",
      "Evaluated 0/5010\n",
      "Evaluated 512/5010\n",
      "Evaluated 1024/5010\n",
      "Evaluated 1536/5010\n",
      "Evaluated 2048/5010\n",
      "Evaluated 2560/5010\n",
      "Evaluated 3072/5010\n",
      "Evaluated 3584/5010\n",
      "Evaluated 4096/5010\n",
      "Evaluated 4608/5010\n",
      "Evaluated 5010/5010\n",
      "No improvement in epoch 2\n",
      "===== Current best:\n",
      "Epoch: 1, Best MSE: 1.3527016639709473, Best CI: 0.7702515670196785\n"
     ]
    }
   ],
   "source": [
    "exe.run(train_startup)\n",
    "best_mse, best_ci, best_ep = np.inf, 0, 0\n",
    "for epoch_id in range(1, max_epoch + 1):\n",
    "    print('========== Epoch {} =========='.format(epoch_id))\n",
    "    train_loss = train(exe, train_program, model, train_dataset)\n",
    "    print('#Epoch: {}, Train loss: {}'.format(epoch_id, train_loss))\n",
    "    mse, ci = evaluate(exe, test_program, model, test_dataset, best_mse)\n",
    "    \n",
    "    if mse < best_mse:\n",
    "        best_mse, best_ci, best_ep = mse, ci, epoch_id\n",
    "        if os.path.exists(best_model):\n",
    "            shutil.rmtree(best_model)\n",
    "            \n",
    "        fluid.io.save_params(exe, best_model, train_program)\n",
    "        metric = 'Epoch: {}, Best MSE: {}, Best CI: {}'.format(epoch_id, best_mse, best_ci)\n",
    "        print(metric)\n",
    "        with open(eval_txt, 'w') as f:\n",
    "            f.write(metric)\n",
    "    else:\n",
    "        print('No improvement in epoch {}'.format(epoch_id))\n",
    "        metric = open(os.path.join(eval_txt), 'r').read()\n",
    "        print('===== Current best:\\n{}'.format(metric))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['data_gen.py',\n",
       " 'train.py',\n",
       " '__pycache__',\n",
       " 'data_preprocess.py',\n",
       " 'eval.txt',\n",
       " 'demos',\n",
       " 'model.py',\n",
       " 'utils.py',\n",
       " 'gin_best_model']"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "os.listdir(os.getcwd())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`eval.txt` and folder `gin_best_model` are saved after training."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Inference"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pgl\n",
    "from rdkit import Chem\n",
    "from pahelix.utils.compound_tools import smiles_to_graph_data\n",
    "from pahelix.utils.protein_tools import ProteinTokenizer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "protein_example = 'MENKKKDKDKSDDRMARPSGRSGHNTRGTGSSSSGVLMVGPNFRVGKKIGCGNFGELRLGKNLYTNEYVAIKLEPMKSRAPQLHLEYRFYKQLGSGDGIPQVYYFGPCGKYNAMVLELLGPSLEDLFDLCDRTFSLKTVLMIAIQLISRMEYVHSKNLIYRDVKPENFLIGRPGNKTQQVIHIIDFGLAKEYIDPETKKHIPYREHKSLTGTARYMSINTHLGKEQSRRDDLEALGHMFMYFLRGSLPWQGLKADTLKERYQKIGDTKRATPIEVLCENFPEMATYLRYVRRLDFFEKPDYDYLRKLFTDLFDRKGYMFDYEYDWIGKQLPTPVGAVQQDPALSSNREAHQHRDKMQQSKNQSADHRAAWDSQQANPHHLRAHLAADRHGGSVQVVSSTNGELNTDDPTAGRSNAPITAPTEVEVMDETKCCCFFKRRKRKTIQRHK'\n",
    "drug_example = 'CCN1C2=C(C=CC(=C2)OC)SC1=CC(=O)C'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "447"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(protein_example)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "isomeric_smiles = Chem.MolToSmiles(Chem.MolFromSmiles(drug_example), isomericSmiles=True)\n",
    "compound_graph = smiles_to_graph_data(isomeric_smiles)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'CCN1C(=CC(C)=O)Sc2ccc(OC)cc21'"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "isomeric_smiles"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create a protein tokenizer which converts amino acid sequence into token IDs, ready for the embedding layer."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "tokenizer = ProteinTokenizer()\n",
    "protein_seq = tokenizer.gen_token_ids(protein_example)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "449"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(protein_seq)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Add padding or cut the protein sequence when use fixed maximum protein length."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "protein_seq = np.array(protein_seq, dtype=np.int64)\n",
    "if max_protein_len > 0:\n",
    "    protein_token_ids = np.zeros(max_protein_len) + ProteinTokenizer.padding_token_id\n",
    "    n = min(max_protein_len, len(protein_seq))\n",
    "    protein_token_ids[:n] = np.array(protein_seq)[:n]\n",
    "    protein_seq = protein_token_ids"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1000"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(protein_seq)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create the `feed_dict` for compound graph. Note that GraphDTA takes atom characteristics, such as number of directly-bonded neighbors (**degrees**), number of sigma electrons excluding electrons bonded to hydrogens (**Hs**), the number of hydrogens implicitly bonded to an atom (**implicit valence**), and whether it is **aromatic**. These four characteristics are treated as the numeric feature. Plus the other features used by Pretrain GNNs, we can represent the input graph using PGL API `pgl.graph.Graph` and `pgl.graph.MultiGraph`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "atom_numeric_feat = np.concatenate([\n",
    "    compound_graph['atom_degrees'],\n",
    "    compound_graph['atom_Hs'],\n",
    "    compound_graph['atom_implicit_valence'],\n",
    "    compound_graph['atom_is_aromatic'].reshape([-1, 1])\n",
    "], axis=1).astype(np.float32)\n",
    "g = pgl.graph.Graph(\n",
    "    num_nodes = len(compound_graph['atom_type']),\n",
    "    edges = compound_graph['edges'],\n",
    "    node_feat = {\n",
    "        'atom_type': compound_graph['atom_type'].reshape([-1, 1]),\n",
    "        'chirality_tag': compound_graph['chirality_tag'].reshape([-1, 1]),\n",
    "        'atom_numeric_feat': atom_numeric_feat\n",
    "    },\n",
    "    edge_feat = {\n",
    "        'bond_type': compound_graph['bond_type'].reshape([-1, 1]),\n",
    "        'bond_direction': compound_graph['bond_direction'].reshape([-1, 1])\n",
    "    })\n",
    "join_graph = pgl.graph.MultiGraph([g])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "feed_dict = model.compound_graph_wrapper.to_feed(join_graph)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Update the `feed_dict` for protein sequence. Notice that the `label` input is just a placeholder, otherwise the static graph won't work."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "protein_token = [protein_seq]\n",
    "protein_length = [0, protein_seq.size]\n",
    "feed_dict['protein_token'] = np.concatenate(protein_token).reshape([-1, 1]).astype('int64')\n",
    "feed_dict['protein_token_lod'] = np.add.accumulate(protein_length).reshape([1, -1]).astype('int32')\n",
    "feed_dict['label'] = np.array([[1.0]]).astype(np.float32)  # just a placeholder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred, = exe.run(test_program, feed=feed_dict, fetch_list=[model.pred], return_numpy=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Predicted Kd value:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.067789"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred[0][0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can setup the customized `protein_example` and `drug_example` to infer other drug and target protein pairs."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.12-final"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}